package server

import (
	"gitee.com/enjoy_5/goods-rpc/internal/model"
	"gitee.com/enjoy_5/goods-rpc/proto/types"
)

func GetTypesByLocation(location, id int64) ([]*types.TypesInfo, error) {
	mod := new(model.Types)
	var typesList []*model.Types
	var err error

	// 根据 location 查询分类信息
	if location == 1 || location == 2 {
		typesList, err = mod.GetTypeByLocation(location)
	} else {
		// 处理三级分类逻辑
		typesList, err = getNestedTypes(id)
	}
	if err != nil {
		return nil, err
	}
	// 将商品信息填充到分类信息的 goods 字段
	var rtypes []*types.TypeRes

	var res []*types.TypesInfo

	for _, t := range typesList {

		rtypes = append(rtypes, &types.TypeRes{
			ID:       int64(t.ID),
			Icon:     t.Icon,
			Lv:       t.Lv,
			Pid:      t.Pid,
			Name:     t.Name,
			Location: t.Location,
		})
	}
	res = append(res, &types.TypesInfo{
		Infos: rtypes,
	})

	return res, nil
}

// 获取嵌套分类信息（一级、二级、三级分类）
func getNestedTypes(id int64) ([]*model.Types, error) {
	mod := new(model.Types)

	if id == 0 {
		list, err := mod.GetTypeList()
		if err != nil {
			return nil, err
		}
		return list, nil
	}

	// 获取一级分类信息
	Lv1IDInfo, err := mod.GetTypeLv1ByID(id)
	if err != nil {
		return nil, err
	}

	// 获取二级分类信息
	Lv2PidInfo, err := mod.GetTypeLv2ByPID(id)
	if err != nil {
		return nil, err
	}

	// 获取三级分类信息
	var Lv2IDs []int64
	for _, v := range Lv2PidInfo {
		Lv2IDs = append(Lv2IDs, int64(v.ID))
	}
	Lv3PIDsInfo, err := mod.GetTypeListByIDs(Lv2IDs)
	if err != nil {
		return nil, err
	}

	// 合并所有分类信息
	var typesList []*model.Types
	typesList = append(typesList, Lv1IDInfo)
	typesList = append(typesList, Lv2PidInfo...)
	typesList = append(typesList, Lv3PIDsInfo...)

	return typesList, nil
}

//func TypesModelToPb(in *model.Types) *types.TypesInfo {
//	return &types.TypesInfo{
//		ID:   int64(in.ID),
//		Icon: in.Icon,
//		Lv:   in.Lv,
//		Pid:  in.Pid,
//		Name: in.Name,
//	}
//}
//func GetTypesLv1ByID(id int64) (info *types.TypesInfo, err error) {
//	mod := new(model.Types)
//
//	Lv1IDInfo, err := mod.GetTypeLv1ByID(id)
//	if err != nil {
//		return nil, err
//	}
//
//	info = TypesModelToPb(Lv1IDInfo)
//
//	//通过一级分类的id获取到二级分类id对应的数据
//	Lv2PidInfo, err := mod.GetTypeLv2ByPID(id)
//	if err != nil {
//		return nil, err
//	}
//
//	//通过for-r循环拿到全部的二级分类id
//	var Lv2IDs []int64
//	for _, v := range Lv2PidInfo {
//		Lv2IDs = append(Lv2IDs, int64(v.ID))
//	}
//	//通过二级分类id获取到三级分类
//	Lv3PIDsInfo, err := mod.GetTypeListByIDs(Lv2IDs)
//	if err != nil {
//		return nil, err
//	}
//
//	//将所有的三级分类数据存到map里,key相当于三级分类的Pid(int64),value相当于是分类的切片
//	TypesLv3Map := make(map[int64][]*types.TypesInfo)
//
//	for _, v := range Lv3PIDsInfo {
//		TypesLv3Map[v.Pid] = append(TypesLv3Map[v.Pid], TypesModelToPb(v))
//	}
//
//	fmt.Println(TypesLv3Map)
//	for _, v := range Lv2PidInfo {
//		lv2Info := TypesModelToPb(v)
//		//二级分类id去三级分类map里找到对应的数据
//		lv2Info.Infos = TypesLv3Map[int64(v.ID)]
//		//二级分类去拼接一级分类的数据
//		info.Infos = append(info.Infos, lv2Info)
//	}
//	return info, nil
//}
